package lee.study.TheGeneric;

/**
 * 写一个泛型类，包含一个方法。该方法是找到数组当中的最大值。
 * <p>
 * T extends Comparable<T>  上界
 * T一定是实现了Comparable这个接口的
 * 泛型是没有下界的。
 */
class Generic<T extends Comparable<T>> {
    public T max(T[] elem) {
        T max = elem[0];
        for (int i = 1; i < elem.length; i++) {
            if (max.compareTo(elem[i]) < 0) {
                max = elem[i];
            }
        }
        return max;
    }
}

/*
/根据实参的类型推导出形参的类型
 */
class Generic2 {//将上面的max方法变成静态的，这样写的好处是可以直接通过类访问max方法

    public static <T extends Comparable<T>> T max(T[] elem) {
        T max = elem[0];
        for (int i = 1; i < elem.length; i++) {
            if (max.compareTo(elem[i]) < 0) {
                max = elem[i];
            }
        }
        return max;
    }
}

public class TheGeneric {
    public static void main(String[] args) {
        Integer[] array = {1, 6, 3, 8, 32, 86, 21, 53};
        System.out.println(Generic2.max(array));
    }

    public static void main1(String[] args) {
        Generic<Integer> generic=new Generic<>();
        Integer[] array = {1, 6, 3, 8, 32, 86, 21, 53};
        System.out.println(generic.max(array));
    }
}
